/*
 * Copyright 2010 Katsunori Koyanagi
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */

package sweezy.anim.impl
{
	import sweezy.anim.core.IAction;

	internal class ActionAnimation extends AnimationDecoratorBase
	{

		private var _action:IAction;

		private var _quePosition:uint;

		public function ActionAnimation(manager:AnimationManager, animation:AnimationBase, action:IAction, quePosition:uint)
		{
			super(manager, animation);

			_action = action;
			if (quePosition > _duration)
			{
				quePosition = _duration;
			}
			_quePosition = quePosition;
		}

		override public function get parameters():Object
		{
			return {quePosition: _quePosition, action: _action};
		}

		override protected function onInitializeInternal():void
		{
			_targetAnimation.initialize();
			_duration = _targetAnimation._duration;
		}

		override protected function onUpdateInternal():void
		{
			if (_action === null)
			{
				return;
			}

			if (_position >= _quePosition && !_action.executed)
			{
				_action.execute();
			}
			else if (_position < _quePosition && _action.executed)
			{
				_action.rollback();
			}

			_targetAnimation.position = _position;
		}
	}
}
